﻿// 3375. 成绩排序.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;
/*
https://www.acwing.com/problem/content/3378/

给定学生的成绩单，成绩单中包含每个学生的姓名和分数，请按照要求将成绩单按成绩从高到低或从低到高的顺序进行重新排列。

对于成绩相同的学生，无论以哪种顺序排列，都要按照原始成绩单中靠前的学生排列在前的规则处理。

输入格式
第一行包含整数 N，表示学生个数。

第二行包含一个整数 0或 1
，表示排序规则，0 表示从高到低，1 表示从低到高。

接下来 N行，每行描述一个学生的信息，包含一个长度不超过 10
的小写字母构成的字符串表示姓名以及一个范围在 0∼100的整数表示分数。

输出格式
输出重新排序后的成绩单。

每行输出一个学生的姓名和成绩，用单个空格隔开。

数据范围
1≤N≤1000
输入样例1：
4
0
jack 70
peter 96
Tom 70
smith 67
输出样例1：
peter 96
jack 70
Tom 70
smith 67
输入样例2：
4
1
jack 70
peter 96
Tom 70
smith 67
输出样例2：
smith 67
jack 70
Tom 70
peter 96
*/

const int N = 1010;

struct PERSON {
    int score, idx;
    string name;
}person[N];

int n, mode;

bool cmp0(const struct PERSON& a, const struct PERSON& b) {
    if (a.score > b.score) return true;
    else if (a.score == b.score) {
        return a.idx < b.idx;
    }
    return false;
}


bool cmp1(const struct PERSON& a, const struct PERSON& b) {
    if (a.score  <  b.score) return true;
    else if (a.score == b.score) {
        return a.idx < b.idx;
    }
    return false;
}

int main()
{
    while (cin >> n >> mode) {
        for (int i = 0; i < n; i++) {
            cin >> person[i].name >> person[i].score;
            person[i].idx = i;;
        }

        if (mode == 0) {
            sort(person, person + n,cmp0);
        }
        else {
            sort(person,person+n,cmp1);
        }

        for (int i = 0; i < n; i++) {
            cout << person[i].name << " " << person[i].score << endl;
        }
    }


    return 0;
}

